<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
  </head>
  <body>
    <script>
      // 构造函数
      function Parent() {
        this.name = 'parent1'
        this.play = [1, 2, 3]
      }
      // 构造函数的原型对象
      Parent.prototype = {
        type: 'custom',
        constructor: Parent // constuctor指向构造函数
      }
      // 实例化
      const parent = new Parent()

      console.log(parent.__proto__) // 拿到原型对象（不推荐）
      console.log(Object.getPrototypeOf(parent)) // 拿到实例上的原型对象（推荐）

      /**
       * prototype、__proto__、constructor三者关系
       * 总结：
       * prototype（原型对象）是构造函数的一个自带属性，上面的属性和方法可以被实例对象公共使用，（任何对象都有原型对象）
       * __proto__是js引擎自带的属性，它指向构造函数的原型对象
       * constructor指向构造函数
       */
    </script>
  </body>
</html>
